package lambda

/*
   1. 无参数的情况 ：
   val/var 变量名 = { 操作的代码 }

   2. 有参数的情况
   val/var 变量名 : (参数的类型，参数类型，...) -> 返回值类型 = {参数1，参数2，... -> 操作参数的代码 }

   可等价于
   // 此种写法：即表达式的返回值类型会根据操作的代码自推导出来。
   val/var 变量名 = { 参数1 ： 类型，参数2 : 类型, ... -> 操作参数的代码 }

   3. lambda表达式作为函数中的参数的时候，这里举一个例子：
   fun test(a : Int, 参数名 : (参数1 ： 类型，参数2 : 类型, ... ) -> 表达式返回类型){
       ...
   }

   //传统代码
   fun test(a : Int, b : Int) :Int{
       return a + b
   }
    */

fun main() {
    println(test(1, 3))
    println(test2(3, 3))
    mapTest()
}


//lambda 写法一
val test: (Int, Int) -> Int = { a, b -> a + b }

//lambda 写法二
val test2 = { a: Int, b: Int -> a + b }

//在使用Lambda表达式的时候，可以用下划线(_)表示未使用的参数，表示不处理这个参数。
fun mapTest() {
    val map = mapOf("key1" to "value1", "key2" to "value2", "key3" to "value3")
    map.forEach { (key, value) ->
        println("$key : $value")
    }
    //不需要key的时候
    map.forEach { (_, value) ->
        println("$value")
    }
}